﻿using System;
using System.Collections.Generic;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Media;
using SomeGame.Actors.Types;

namespace SomeGame.Zones {

    /// <summary>
    ///     This class is simply a datastore to be serialized.
    /// </summary>
    [Serializable]
    public class Zone {

        // Properties of the Zone itself.
        public string Name;
        public string Path;
        public readonly IList<Region> Regions = new List<Region>();
        public Rectangle Bounds;
	    public int Floor;
        public Song CurrentSong;

        // Assets
        public readonly IDictionary<string, Song> Songs = new Dictionary<string, Song>(); 
        public readonly IDictionary<string, SoundEffect> SoundEffects = new Dictionary<string, SoundEffect>();
        public readonly IDictionary<string, SoundEffectInstance> SoundEffectInstances = new Dictionary<string, SoundEffectInstance>();
        public readonly IDictionary<string, Texture2D> Textures = new Dictionary<string, Texture2D>();
        public readonly IDictionary<string, IList<AnimationFrame>> AnimationFrameLists = new Dictionary<string, IList<AnimationFrame>>();

        // GOs it contains.
        public readonly IList<Actor> StaticBackgroundActors = new List<Actor>(); // Sun, moon, starry sky, etc.
        public readonly IList<Actor> StaticBackgroundParticles = new List<Actor>(); // Smoke in the distance, etc.
        public readonly IList<Actor> BackgroundActors = new List<Actor>(); 
        public readonly IList<Actor> BackgroundParticles = new List<Actor>();
        public readonly IList<Actor> PlayerLevelActors = new List<Actor>();
        public readonly IList<Actor> PlayerLevelParticles = new List<Actor>();
        public readonly IList<Actor> ForegroundParticles = new List<Actor>();
        public readonly IList<Actor> ForegroundActors = new List<Actor>();

        // Specific lists
        public readonly IList<Trigger> Triggers = new List<Trigger>(); 
        public readonly IList<ToggleSwitch> ToggleSwitches = new List<ToggleSwitch>(); 

    }

}